package com.cg.design.graphicdesignpattern.observer;

import java.util.ArrayList;

/**
 * 表示生成数值的生成器对象的抽象类
 *
 * @program: LeetCode->NumberGenerator
 * @description: 表示生成数值的生成器对象的抽象类
 * @author: cg
 * @create: 2022-03-29 21:27
 **/
public abstract class NumberGenerator {
    /**
     * 保存Observer
     */
    private ArrayList<Observer> observers = new ArrayList();

    /**
     * 注册Observer
     * @param observer
     */
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    /**
     * 删除Observer
     * @param observer
     */
    public void deleteObserver(Observer observer) {
        observers.remove(observer);
    }

    /**
     * 向Observer发送通知
     */
    public void notifyObserves() {
        for (Observer observer : observers) {
            observer.update(this);
        }
    }

    /**
     * 获取数值的抽象方法
     * @return
     */
    public abstract int getNumber();

    /**
     * 生成数值的抽象方法
     */
    public abstract void execute();

}
